﻿#region Using

using SAPbouiCOM;
using SapFramework.Interface.Controls.Items.Base;
using SapFramework.Interface.Events;

using Form = SapFramework.Interface.Controls.Forms.Base.Form;
using Item = SapFramework.Interface.Controls.Items.Base.Item;

#endregion

namespace SapFramework.Interface.Controls.Items.Specific
{
    /// <summary>
    /// Realiza o encapsulamento de um objeto do tipo <see cref="SAPbouiCOM.Folder"/> da UI API do SAP Business One
    /// </summary>
    public sealed class Folder : Item, SAPbouiCOM.Folder
    {
        #region Eventos

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, mas nenhuma ação foi tomada ainda.
        /// </summary>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventBoolItem OnBeforeItemPressed;

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, e qualquer ação do SBO já foi realizada.
        /// </summary>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventVoidItem OnAfterItemPressed;

        #endregion

        /// <summary>
        /// Guarda uma referencia para a parte específica do item
        /// </summary>
        private readonly SAPbouiCOM.Folder mFolder;

        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="aForm">O formulário ao qual o item pertence</param>
        /// <param name="aItemUniqueId">Id único do Item do Form do SAP Business One</param>
        public Folder( Form aForm, string aItemUniqueId ) : base( aForm, aItemUniqueId, BoFormItemTypes.it_FOLDER )
        {
            mFolder = mItem.Specific as SAPbouiCOM.Folder;
        }

        #region Implementation of IFolder

        /// <summary>
        /// Posiciona o fóco no Folder atual.
        /// </summary>
        public void Select()
        {
            mFolder.Select();
        }

        /// <summary>
        /// Agrupa um objeto do tipo Folder com outro de mesmo tipo.
        /// 
        /// Utilize este método para informar ao formulário que ele deve mostrar uma Folder por vez entre as Foldes que fazem parte do grupo.
        /// </summary>
        /// <remarks>
        /// Quando invocar este método, o SAP Business One automáticamente arruma a propriedade <see cref="ValOn"/> dos itens do grupo.
        /// A propriedade é setada em ordem crescente, partindo do número 1.
        /// </remarks>
        /// <param name="aTargetUniqueId">O Id único do Folder que deseja-se adicionar ao grupo.</param>
        public void GroupWith( string aTargetUniqueId )
        {
            mFolder.GroupWith( aTargetUniqueId );
        }

        /// <summary>
        /// Indica quando este Folder está selecionado.
        /// </summary>
        /// <remarks>
        /// Não é possivel des-selecionar uma Folder. Apenas selecionar uma nova.
        /// </remarks>
        public bool Selected
        {
            get { return mFolder.Selected; }
        }

        /// <summary>
        /// Referência para o objeto <see cref="DataBind"/>, que realiza uma ligação com um:
        /// <list type="bullet">
        /// <see cref="UserDataSource"/>
        /// <see cref="DBDataSource"/>
        /// <see cref="DataTable"/>
        /// </list>
        /// </summary>
        /// <see cref="DataBind"/>
        public DataBind DataBind
        {
            get { return mFolder.DataBind; }
        }

        /// <summary>
        /// Texto do Folder
        /// </summary>
        public string Caption
        {
            get { return mFolder.Caption; }
            set { mFolder.Caption = value; }
        }

        /// <summary>
        /// O valor do data source quando o item está selecionado.
        /// 
        /// Setar o data source com este valor irá seleciona a CheckBox (Folder?!). 
        /// Se a CheckBox (Folder?!) for selecionada pelo usuário, o data source é setado para este valor.
        /// </summary>
        /// <remarks>
        /// Esta propriedade só pode ser setada em objetos do usuário.
        /// 
        /// Quando invocando o método <see cref="Folder.GroupWith"/> para <see cref="Folder"/> e <see cref="OptionButton"/>, SAP Business One irá automáticamente setar a propriedade ValOn 
        /// destes itens em ordem incremental, partindo do número 1.
        /// </remarks>
        public string ValOn
        {
            get { return mFolder.ValOn; }
            set { mFolder.ValOn = value; }
        }

        /// <summary>
        /// O valor do data source quando o item não está selecionado.
        /// 
        /// Setar o data source com este valor irá des-seleciona a CheckBox (Folder?!). 
        /// Se a CheckBox (Folder?!) for des-selecionada pelo usuário, o data source é setado para este valor.
        /// </summary>
        /// <remarks>
        /// Esta propriedade só pode ser setada em objetos do usuário.
        /// </remarks>
        public string ValOff
        {
            get { return mFolder.ValOff; }
            set { mFolder.ValOff = value; }
        }

        #endregion
    }
}